播放音频(Playing Audio)
关于如何在 .riv 文件中添加音频(Audio),请先阅读:音频事件(Audio Events)。
在 Web 端(Web),部分浏览器会限制“未交互页面自动播放音频”。
这不是 Rive 特有行为,而是浏览器通用策略:页面需要先产生一次用户交互(触摸 / 点击),之后才能播放声音。
嵌入资源(Embedded Assets)
使用嵌入资源(Embedded Assets)时,通常无需额外处理即可播放音频。
但在某些平台上,如需设置混音(mix)、压低(duck)等全局音频策略,仍需额外配置,见下文“音频设置(Audio Settings)”。
引用资源(Referenced Assets)
引用资源(Referenced Assets)也可以自动触发播放,但前提是:运行时(Runtime)尝试播放时,音频文件必须已可加载。
更多信息见:加载资源(Loading Assets)
Apple 示例(Swift)
// Load a referenced audio file, with the same name and extension as added in the editor
let viewModel = RiveViewModel(fileName: "my_rive_file") { asset, data, factory -> Bool in
guard let audioAsset = asset as? RiveAudioAsset else {
return false
}
guard let url = Bundle.main.url(
forResource: audioAsset.uniqueName(),
withExtension: audioAsset.fileExtension()
) else {
print("Failed to load asset \(asset.uniqueFilename()) from bundle.")
return false
}
guard let data = try? Data(contentsOf: url) else {
print("Failed to load \(url) from bundle.")
return false
}
audioAsset.audio(factory.decodeAudio(data))
return true
}
音频设置(Audio Settings)
在 iOS 上,音频播放会遵循 AVAudioSession 的共享实例设置。
- 官方文档:AVAudioSession
- 可用于控制:混音(mix)、压低(duck)等策略
- 建议在应用生命周期早期完成配置
// Example: Ignore the silent switch, and mix with other audio
let category: AVAudioSession.Category = .playback
let options: AVAudioSession.CategoryOptions = [.mixWithOthers]
AVAudioSession.sharedInstance().setCategory(category, options: options)
设置音量(Setting Volume)
Artboard 可以单独设置音量(volume)。
- 父 Artboard 的音量会影响其组件实例(component instances)
- 但设置组件实例音量,不会反向更新父 Artboard
// Set the current artboard's volume to 50%
let viewModel = RiveViewModel(fileName: "my_rive_file")
viewModel.riveModel?.volume = 0.5